package br.com.sistemasaude.dao;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

import br.com.sistemasaude.bean.Medicamento;
import br.com.sistemasaude.util.JpaUtil;

public class MedicamentoDAOImpl implements MedicamentoDAO {
	
	private final GenericDAO<Medicamento> dao;	
	
	EntityManager em = new JpaUtil().getEntityManager();
	
	public MedicamentoDAOImpl() {
		dao = new GenericDAO<Medicamento>(em, Medicamento.class);
		}
	
	public void salvar(Medicamento medicamento) {
		
		try {

			em.getTransaction().begin();
			dao.salvar(medicamento);
			em.getTransaction().commit();

		} catch (Exception e) {
			
			em.getTransaction().rollback();
			e.printStackTrace();
			
		} finally {
			em.close();
		}
		
	}
	
	public boolean remove(Medicamento medicamento){
		try {

			em.getTransaction().begin();
			dao.remove(medicamento);
			em.getTransaction().commit();
			return true;
		} catch (Exception e) {
			
			em.getTransaction().rollback();
			e.printStackTrace();
			return false;
			
		} finally {
			em.close();
		}
	}
	
	public boolean update(Medicamento medicamento){
		try {

			em.getTransaction().begin();
			dao.update(medicamento);
			em.getTransaction().commit();
			return true;

		} catch (Exception e) {
			
			em.getTransaction().rollback();
			e.printStackTrace();
			return false;
		} finally {
			em.close();
		}
		
	}
	
	public List<Medicamento> listar(){
		
		List<Medicamento> listaMateriais = new ArrayList<Medicamento>();
		try {

			listaMateriais = dao.listar();

		} catch (Exception e) {
			
			e.printStackTrace();
			
		} finally {
			em.close();
		}
		
		return listaMateriais;
		
	}
	
	
	
public Medicamento localizaMedicamento(String medicamento){
		
		EntityTransaction t = em.getTransaction();
		Medicamento med = null;
		try {

			t.begin();
			Query q =  em.createQuery("select m from Medicamento m where m.descricao like:pMedicamento");
			q.setParameter("pMedicamento", medicamento);
			med = (Medicamento) q.getSingleResult();
			
			t.commit();
			

		} catch (Exception e) {

			e.printStackTrace();
			if (t.isActive()) t.rollback();

		} finally {

			em.close();
		}
		
		return med;

	}

	
}
